package edu.uoc.tds.pec4.util;

import edu.uoc.tds.pec4.util.ExceptionUtils;
import edu.uoc.tds.pec4.util.ExceptionUtils;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

/**
 * Tecnicas de Desarrollo de Software - (UOC)
 * Clase para el tratamiento de los textos en diferentes idiomas
 * @author Grupo MagicSoftware
 * @version 1.0
 *
 */
public class LanguageUtils {

    private static ResourceBundle resourceBundle;
    private static String currentBaseName;
    private static Locale currentLocale;

    /**
     * Configuracion del idioma con la clase LanguageUtils
     * El idioma vendra determinado por el idioma por defector del sistema operativo que
     * es referenciado por Locale.getDefault()
     *
     * @param  baseName  Ubicacion de los ficheros de idioma
     * @throws NullPointerException si baseName es nulo
     * @return Devuelve booleano indicando si la operacion ha ido bien
     */
    public static synchronized boolean setDefaultLanguage(String baseName) {
        try {
            currentBaseName = baseName;
            resourceBundle = ResourceBundle.getBundle(baseName, Locale.getDefault());
            return true;
        } catch (MissingResourceException e) {
            ExceptionUtils.visualizarError(ExceptionUtils.Err_Missing_Text);
            return false;
        }
    }



    /**
     * Configura el idioma indicado por el usuario en el gestor de idiomas LanguageUtils
     *
     * @param baseName direccion donde se encuentra el fichero de idiomas
     * @param locale idioma que se quiere indicar
     * @throws NullPointerException si baseName o locale son nulos
     * @return un booleano indicando si la operacion ha ido bien
     */
    public static synchronized boolean setLanguage(String baseName, Locale locale) {
        try {
            currentBaseName = baseName;
            currentLocale = locale;
            resourceBundle = ResourceBundle.getBundle(baseName, locale);
            return true;
        } catch (MissingResourceException e) {
            ExceptionUtils.visualizarError(ExceptionUtils.Err_Missing_Text);
            return false;
        }
    }

    /**
     * Obtiene el texto del fichero de idiomas segun la etiqueta solicitada
     * @param key etiqueta del fichero de idiomas
     * @throws NullPointerException si el gestor de idiomas no ha sido a�n configurado
     * @return un String con la traduccion solicitada
     */
    public static String getMessage(String key) {
        try {
            return resourceBundle.getString(key);
        } catch (MissingResourceException e) {
            ExceptionUtils.visualizarError(ExceptionUtils.Err_Missing_Text+key);
            return new String();
        }
    }

    /**
     * Informa cual es actualmente el fichero de idiomas configurado
     * @return un String con el nombre del fichero del gestor de idiomas
     */
    public static String getCurrentBaseName() {
        return currentBaseName;
    }

    /**
     * Informa cual es actualmente el idioma configurado
     * @return un Locale con el idioma del gestor de idiomas
     */
    public static Locale getCurrentLocale() {
        return currentLocale;
    }
}
